﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ArriendoVehiculo.AccesoADatos;

namespace ArriendoVehiculo.LogicaNegocio
{
    class Validaciones
    {
        //Si encuentra la marca buscada retorna su ID, si no la encuetra retorna un 0
        public static int existeMarca(string MARCA)
        {
           VehiculosEntities bd = new VehiculosEntities();
            Marca marca = bd.Marca.SingleOrDefault(m => m.Marca1 == MARCA);
            if (marca != null)
            {
                return marca.Id_Marca;
            }
            return 0;
        }

        //Si encuentra el modelo retorna su ID, si no la encuetra retorna un 0
        public static int existeModelo(string MODELO)
        {
            VehiculosEntities bd = new VehiculosEntities();
            Modelo modelo = bd.Modelo.SingleOrDefault(m => m.Modelo1 == MODELO);

            if (modelo != null)
            {

                return modelo.Id_Modelo;
            }
            else
            {
                return 0;
            }
        }

        //busca en la tabla "vehicculo" si existe el vehiculo con los parametros dados
        public static bool existeAuto(string MARCA, string MODELO,string COLOR)
        {
            VehiculosEntities bd = new VehiculosEntities();

            return bd.Vehiculos.Any(p => p.Marca.Marca1 == MARCA && p.Modelo.Modelo1==MODELO&&p.Color==COLOR);
        }

        //busca si el rut ingresado ya esta en la tabla Clientes
        public static bool existeCliente(string RUT)
        {
            VehiculosEntities bd = new VehiculosEntities();

            return bd.Cliente.Any(p => p.Rut==RUT);
        }
        //busca si el cliente ya tiene un arriendo(el cliente no podra arrendar mas de 1 vehiculo)
        public static bool existeArriendo(string RUT)
        {
            VehiculosEntities bd = new VehiculosEntities();
            return bd.Arriendo.Any(p => p.Rut==RUT);
        }

        //busco si el rut ingresado se encuentra en lista negra
        public static bool ExisteClienteEnListaNegra(string RUT)
        {
            VehiculosEntities bd = new VehiculosEntities();
            return bd.ListaNegra.Any(p => p.Rut == RUT);
        }
        //valido el rut ingresado
        public static bool ValidaRut(string RUT) 
        {
             string rut;
             string numero_f, numeroE, resultado;
             int iNum, Suma=0;
             int largo_NumeroE;
             int multiplicador = 2;
            rut = RUT; //Se le asigna rut al parametro recibido 
            int largo = rut.Length - 1;
            numero_f = rut.Substring(largo, 1);
            numeroE = rut.Substring(0, largo - 1);
            largo_NumeroE = numeroE.Length;
            for (int i = largo_NumeroE; i >= 1; i--) //Realiza el calculo del RUN
            {
                iNum = int.Parse(numeroE.Substring(i - 1, 1));
                Suma = Suma + iNum * multiplicador;
                multiplicador++;
                if (multiplicador == 8)
                {
                    multiplicador = 2;
                }

            }
            resultado = Convert.ToString(11 - (Suma % 11)); //El valor obtenido se la asigna a resultado
                                                            //y lo convierte en String
            if (resultado == "10")
            {

                resultado = "k"; 
            }
            else if (resultado == "11")
            {
                resultado = "0";
            }

            if (resultado == numero_f)
            {
                return true;
            }
            else
            {
                return false;
            }

        }

    }
}
